home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 25
/
Cream of the Crop 25.iso
/
doom
/
axxwar_1.zip
/
SOURCES
/
SEEKER.QC
< prev
next >
Wrap
Text File
|
1997-03-13
|
3KB
|
151 lines
// AxxWars 0.8
/*
==========
W_FireHome
==========
*/
void() HomeThink;
entity() HomeFindTarget;
float(entity targ) visible;
float(entity targ) infront;
void() W_FireHome =
{
local entity missile, mpuff;
if (self.ammo_rockets < 5)
{
// AXXAF START
self.PW_prevweapon = self.weapon;
// AXXAF END
self.weapon = IT_ROCKET_LAUNCHER;
W_SetCurrentAmmo ();
return;
}
self.currentammo = self.ammo_rockets = self.ammo_rockets - 5;
sound (self, CHAN_WEAPON, "weapons/sgun2.wav", 1, ATTN_NORM);
self.punchangle_x = -2;
missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_FLYMISSILE;
missile.solid = SOLID_BBOX;
// set missile speed
makevectors (self.v_angle);
missile.velocity = aim(self, 1000);
missile.velocity = (missile.velocity * 250);
missile.angles = vectoangles(missile.velocity);
missile.touch = T_MissileTouch;
// set missile duration
missile.nextthink = time + 0.2;
missile.think = HomeThink;
missile.enemy = world;
missile.classname = "seeker";
setmodel (missile, "progs/missile.mdl");
setsize (missile, '0 0 0', '0 0 0');
setorigin (missile, self.origin + v_forward*8 + '0 0 16');
};
/*
===========
Homeinfront
===========
*/
float(entity targ) Homeinfront =
// returns 1 if the entity is in front (in sight) of self
{
local vector vec;
local float dot;
makevectors (self.angles);
vec = normalize (targ.origin - self.origin);
dot = vec * v_forward;
if ( dot > 0.5) // raise this number for more specific infront
{
return TRUE;
}
return FALSE;
};
/*
==============
HomeFindTarget
==============
*/
entity() HomeFindTarget =
{
local entity head, selected;
local float dist;
dist = 100000;
selected = world;
head = findradius(self.origin, 100000);
while(head)
{
if( (head.health > 1) && (head != self) )
{
traceline(self.origin,head.origin,TRUE,self);
if ( Homeinfront(head) && (trace_fraction >= 1) && (vlen(head.origin - self.origin) < dist)
&& (head.classname != "door" && (head.classname != "backpack") && (head.classname != "dog_food") ) )
{
selected = head;
dist = vlen(head.origin - self.origin);
}
}
head = head.chain;
}
if (selected != world)
{
sprint (self.owner,"Seeking->");
if (selected.classname == "player")
{
sprint (self.owner,selected.netname);
sprint (selected,self.owner.netname);
sprint (selected," has a bogey on you!\n");
}
else
sprint (self.owner,selected.classname);
sprint (self.owner,"\n");
}
return selected;
};
/*
=========
HomeThink
=========
*/
void() HomeThink =
{
local vector dir, vtemp;
self.enemy = HomeFindTarget();
if (self.enemy != world) // Arr.. don't be taken on da World!
{
vtemp = self.enemy.origin + '0 0 10';
dir = normalize(vtemp - self.origin);
self.velocity = self.velocity + (dir * 500);
self.angles = vectoangles(self.velocity);
}
self.nextthink = time + 0.2;
self.think=HomeThink;
};